草庐IT

c++ - Qt Release build 给出 MSVC++ Runtime Library Error

全部标签

c++ - 是否可以在分配期间在 C++ 中给出一个类的定义,这在 Java 中是允许的

或者简单地说我可以做一些事情吗classA{public:virtualvoidfoo()=0;};classB{public:A*a;b(){a=newA(){voidfoo(){printf("hello");}}}; 最佳答案 不,C++没有像Java那样的匿名类。你可以像这样定义本地类:classB{public:A*a;b(){structmy_little_class:publicA{voidfoo(){printf("hello");}};a=newmy_little_class();}};或者可能只是一个嵌套类:cl

c++ - lambda 表达式的右值和左值引用 - gcc 与 msvc

在C++中,将右值隐式转换为左值引用是非法的。考虑以下代码,其中左值引用绑定(bind)到右值(lambda):intmain(){auto&f=[]()->void{};return0;}gcc(4.8.1)不接受这样的代码(完全有道理)。但是,Microsoft编译器确实接受它,这意味着它要么接受非标准代码,要么C++允许左值引用绑定(bind)到右值lambda表达式的特殊情况。问题:哪个假设是正确的? 最佳答案 您问题的核心是:rvalues可以绑定(bind)到non-constlvalue引用吗?标准说不。rvalues

c++ - 大负数乘以 -1 给出输出负数 C++

为什么这个程序的输出是-2147483648?#includeusingnamespacestd;intmain(){longlonga=-2147483648;a=a*-1;cout它应该是2147483648因为它在longlong范围内。为什么标志没有变化?我什至尝试过abs()函数,但结果是一样的。另外更令人惊讶的是,这个程序输出了2147483648:#includeusingnamespacestd;intmain(){longlonga=-2147483648;a=a*-1;a=a*-1;cout第二次,乘以-1成功了。如果重要的话,我使用的是C++4.8.1。

c++ - 使用无捕获 lambda 表达式作为条件运算符的第二个和第三个操作数时出现 MSVC 错误

下面的代码被GCC和Clang欣然接受-std=c++14但会导致VisualStudio2013出现编译错误。#include#include#includeusingnamespacestd;intmain(){autoincreasing=[](intlhs,intrhs){returnlhsrhs;};std::vectorv(0,10);boolincrease=true;std::sort(v.begin(),v.end(),increase?increasing:decreasing);return0;}错误是:main.cpp(11):errorC2446:':':no

c++ - MSVC 默认内存对齐为 8

根据MSDN,/Zp命令默认为8,这意味着使用64位对齐边界。我一直假设对于32位应用程序,MSVC编译器将使用32位边界。例如:structTest{charfoo;intbar;};编译器会像这样填充它:structTest{charfoo;charpadding[3];intbar;};因此,由于默认使用/Zp8,这是否意味着使用上面的相同示例我的填充变为7+4字节:structTest{charfoo;charpadding1[7];intbar;charpadding2[4];};//Structurehas16bytes,endingonan8-byteboundary这有

c++ - 如何忽略 MSVC 中未初始化的变量错误

我在使用MSVS编译器时遇到问题,我有以下代码:if(!list){*type=raw_data[*i++];ptr=(char*)&size;ptr[1]=raw_data[*i++];ptr[0]=raw_data[*i++];name=newchar[size+1];memcpy(name,raw_data+*i,size);name[size]='\0';*i+=size;}之后:if(!list){s->name=name;s->name_size=size;}list的值在这个函数中没有改变,但是由于这个错误我无法编译代码:Error1errorC4703:potentia

c++ - 变量名与函数名相同,给出编译器错误...为什么?

今天遇到一个有趣的问题,我想了解原因。考虑以下几点:classBase{public:Base(){}~Base(){}staticvoidfunction1(){}voidfunction2(){intfunction1;function1=0;function1();//我收到以下错误:expressionprecedingparenthesesofapparentcallmusthave(pointer-to-)functiontype我想我明白为什么会出现此错误:function1在function2()之外被自己调用时,实际上是指向function1()的函数指针。在func

c++ - MSVC - 有什么方法可以检查函数是否实际上是内联的?

我必须检查一个函数是否被编译器内联。有没有办法不看汇编(我不读)就可以做到这一点。我没有办法解决这个问题,所以我宁愿我们不能讨论这样做的智慧。谢谢! 最佳答案 如果您启用警告C4714、C4710和C4711,它应该会为您提供有关哪些函数是内联的和未内联的相当详细的信息。 关于c++-MSVC-有什么方法可以检查函数是否实际上是内联的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

c++ - 为什么 'sizeof' 会给出错误的测量值?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:structsizeofresultnotexpected我有这个C++结构:structbmp_header{//bitmapfileheader(14bytes)charSign1,Sign2;//2unsignedintFile_Size;//4unsignedintReserved_Dword;//4unsignedintData_Offset;//4//bitmapinfoheader(16bytes)unsignedintDib_Info_Size;//4unsignedintImage_Widt

c++ - 为什么在返回右值引用时给出 C++ 编译器警告?

我一直在研究右值引用(对我来说是一个新概念),并且对我在以下类函数中收到的警告感到困惑...string&&Sampler::Serial()const{stringstreamss;..[assembleastringvalueusingdatamembers].returnss.str();}编译成功,但有以下警告.....\Metrics\Sampler.cpp:71:16:warning:returningreferencetotemporary[-Wreturn-local-addr]returnss.str();^我完全知道我正在返回一个临时值,我使用右值引用作为我的返回类